Autoencoder একটি অস্বীকৃত মেশিন লার্নিং মডেল, যা একটি ইনপুট সিকুয়েন্স থেকে কমপ্লেক্স তথ্যের একটি compressed (নিম্ন-মাত্রার) রিপ্রেজেন্টেশন তৈরি করে এবং এটি পুনরায় ইনপুট সিকুয়েন্সে রূপান্তর করে। একটি সাধারণ Autoencoder মডেল দুইটি প্রধান অংশে বিভক্ত:
- Encoder: এটি ইনপুট ডেটার কমপ্লেক্সিটি কমিয়ে একটি compressed রিপ্রেজেন্টেশন তৈরি করে।
- Decoder: এটি compressed রিপ্রেজেন্টেশন থেকে ইনপুট ডেটার পুনঃপ্রস্তুত পুনরুদ্ধার করে।
এখানে একটি সাধারণ Autoencoder মডেল তৈরি করার জন্য Keras ব্যবহার করে উদাহরণ দেওয়া হলো।
Step-by-Step: Simple Autoencoder মডেল তৈরি
1. লাইব্রেরি ইমপোর্ট করা
import numpy as np
from keras.layers import Input, Dense
from keras.models import Model
from keras.datasets import mnist
import matplotlib.pyplot as plt
2. ডেটা লোড এবং প্রিপ্রসেসিং
আমরা MNIST ডেটাসেট ব্যবহার করব, যা হস্তাক্ষরিত ডিজিটের ছবি ধারণ করে।
# MNIST ডেটাসেট লোড করা
(x_train, _), (x_test, _) = mnist.load_data()
# ডেটাকে রিসাইজ এবং নরমালাইজ করা (0-1 রেঞ্জে)
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# 28x28 ছবি হিসেবে Flatten (784 ফিচারের ভেক্টর)
x_train = x_train.reshape((x_train.shape[0], 784))
x_test = x_test.reshape((x_test.shape[0], 784))
3. Encoder এবং Decoder লেয়ার তৈরি করা
Autoencoder মডেলটি দুটি প্রধান অংশ নিয়ে গঠিত:
- Encoder: এটি ইনপুট সিকুয়েন্স (ইমেজ) থেকে একটি compressed রিপ্রেজেন্টেশন তৈরি করে।
- Decoder: এটি compressed রিপ্রেজেন্টেশন থেকে পুনরায় ইনপুট পুনঃপ্রস্তুত করার চেষ্টা করে।
# ইনপুট লেয়ার
input_img = Input(shape=(784,))
# Encoder (কমপ্লেক্সিটি কমিয়ে ফেলা)
encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32, activation='relu')(encoded) # কমপ্লেক্সিটির কমপক্ষে স্তর
# Decoder (কম্প্রেসড ইনপুট থেকে পুনরুদ্ধার)
decoded = Dense(64, activation='relu')(encoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='sigmoid')(decoded) # পুনরুদ্ধার করা ইনপুট
# মডেল তৈরি করা
autoencoder = Model(input_img, decoded)
# Encoder মডেল তৈরি করা (শুধু ইনপুট থেকে এনকোডেড ভেক্টর পাওয়ার জন্য)
encoder = Model(input_img, encoded)
# Decoder মডেল তৈরি করা (শুধু এনকোডেড ভেক্টর থেকে আউটপুট পুনরুদ্ধারের জন্য)
encoded_input = Input(shape=(32,))
decoder_h1 = autoencoder.layers[-3]
decoder_h2 = autoencoder.layers[-2]
decoder_h3 = autoencoder.layers[-1]
decoder = Model(encoded_input, decoder_h3(decoder_h2(decoder_h1(encoded_input))))
4. মডেল কম্পাইল এবং প্রশিক্ষণ
# মডেল কম্পাইল করা
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
# মডেল প্রশিক্ষণ
autoencoder.fit(x_train, x_train, epochs=50, batch_size=256, validation_data=(x_test, x_test))
5. মডেল মূল্যায়ন এবং ভিজুয়ালাইজেশন
এখন, প্রশিক্ষিত মডেল থেকে compressed (encoded) আউটপুট এবং পুনরুদ্ধৃত আউটপুট দেখার জন্য ভিজুয়ালাইজেশন করা যেতে পারে।
# প্রথম 10টি ইনপুট ছবির পুনঃপ্রস্তুত আউটপুট চিত্র তৈরি করা
decoded_imgs = autoencoder.predict(x_test[:10])
# ইনপুট চিত্র এবং পুনঃপ্রস্তুত চিত্র দেখানো
n = 10 # কতটি ছবির জন্য ভিজুয়ালাইজেশন করা হবে
plt.figure(figsize=(20, 4))
for i in range(n):
# আসল চিত্র
ax = plt.subplot(2, n, i + 1)
plt.imshow(x_test[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
# পুনরুদ্ধৃত চিত্র
ax = plt.subplot(2, n, i + 1 + n)
plt.imshow(decoded_imgs[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
সারাংশ
এখানে আমরা একটি Simple Autoencoder মডেল তৈরি করেছি যা MNIST ডেটাসেট ব্যবহার করে প্রশিক্ষণ নেয়। এই মডেলটি দুটি প্রধান অংশে বিভক্ত:
- Encoder: এটি ইনপুট ছবি থেকে কমপ্লেক্সিটি কমিয়ে একটি compressed (encoded) রিপ্রেজেন্টেশন তৈরি করে।
- Decoder: এটি সেই compressed রিপ্রেজেন্টেশন থেকে আসল ছবির পুনরুদ্ধার করার চেষ্টা করে।
Autoencoder মডেলগুলি ব্যবহার করা হয় তথ্যের compression, denoising, feature learning এবং anomaly detection এর মতো বিভিন্ন কাজের জন্য।
Read more